package br.com.ordemservico.control;

import java.util.List;

import javax.persistence.Query;

import br.com.ordemservico.control.conexao.Conexao;
import br.com.ordemservico.model.Cliente;
import br.com.ordemservico.model.Produto;

public class ProdutoDao {
	Conexao con;
	public ProdutoDao() {
		con = new Conexao();
	}
	
	public Produto criar(Produto c) {
		
		try{
			con.conectar();
			con.getTransaction().begin();
			con.getEntityManager().persist(c);
			con.getTransaction().commit();
			
		}catch(Exception e){
			System.out.println("Erro ao cadastrar Produto");
			e.getStackTrace();
		}finally{
			con.getEntityManager().close();
		}
		
		return c;
	}
	public Produto editar(Produto c) {
		
		try{
			con.conectar();
			con.getTransaction().begin();
			con.getEntityManager().merge(c);
			con.getTransaction().commit();
			
		}catch(Exception e){
			System.out.println("Erro ao editar Produto");
			e.printStackTrace();
		}finally{
			con.getEntityManager().close();
		}
		
		return c;
	}
	public boolean excluir(Produto c) {
		//Cliente cliente = findId(c.getId_cliente());
		boolean r = true;
		try{
			con.conectar();
			con.getTransaction().begin();
			Produto produto = con.getEntityManager().merge(c);
			con.getEntityManager().remove(produto);
			con.getTransaction().commit();
			
		}catch(Exception e){
			r = false;
			System.out.println("Erro ao excluir produto");
			e.printStackTrace();
		}finally{
			con.getEntityManager().close();
		}
		
		return r;
		
	}
	public List<Produto> findAll() {
		List<Produto> listaProduto = null;
		try{
			con.conectar();
			con.getTransaction().begin();
			Query query = con.getEntityManager().createNamedQuery("Produto.findAll");
			con.getTransaction().commit();
			listaProduto =   query.getResultList();

		}catch(Exception e){
			System.out.println("Erro ao pesqusiar "+e.getStackTrace());
		}finally{
			con.getEntityManager().close();
		}
		return listaProduto;
	}
	public List<Produto> findListaDesc(String desc) {
		List<Produto> listaProduto = null;
		try{
			con.conectar();
			con.getTransaction().begin();
			//Query query = con.getEntityManager().createNamedQuery("Cliente.findNome").setParameter("nome", nome);
			Query query = con.getEntityManager().createNativeQuery("select * from Produto where descricao like ? ", Produto.class).setParameter("1", "%"+desc+"%");
			con.getTransaction().commit();
			listaProduto =  query.getResultList();

		}catch(Exception e){
			System.out.println("Erro ao pesqusiar "+e.getStackTrace());
		}finally{
			con.getEntityManager().close();
		}
		return listaProduto;
	}
	public List<Produto> findListaCodigo(String cod) {
		List<Produto> listaProduto = null;
		try{
			con.conectar();
			con.getTransaction().begin();
			//Query query = con.getEntityManager().createNamedQuery("Cliente.findNome").setParameter("nome", nome);
			Query query = con.getEntityManager().createNativeQuery("select * from Produto where codigo like ? ", Produto.class).setParameter("1", "%"+cod+"%");
			con.getTransaction().commit();
			listaProduto =  query.getResultList();

		}catch(Exception e){
			System.out.println("Erro ao pesqusiar "+e.getStackTrace());
		}finally{
			con.getEntityManager().close();
		}
		return listaProduto;
	}
	public Produto findReferencia(String ref) {
		Produto produto = null;
		try{
			con.conectar();
			con.getTransaction().begin();
			//Query query = con.getEntityManager().createNamedQuery("Cliente.findNome").setParameter("nome", nome);
			Query query = con.getEntityManager().createNativeQuery("select * from Produto where codigo = ? ", Produto.class).setParameter("1", ref);
			con.getTransaction().commit();
			produto =  (Produto) query.getSingleResult();
		}catch(javax.persistence.NoResultException e){
			produto = null;
		}catch(Exception e){
			System.out.println("Erro ao pesqusiar ");
			e.printStackTrace();
		}finally{
			con.getEntityManager().close();
		}
		return produto;
	}
}
